package me.mingshan.leetcode;

import java.util.*;

/**
 * https://leetcode.cn/problems/intersection-of-two-arrays
 * <p>
 * 给定两个数组 nums1 和 nums2 ，返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入：nums1 = [1,2,2,1], nums2 = [2,2]
 * 输出：[2]
 * 示例 2：
 * <p>
 * 输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
 * 输出：[9,4]
 * 解释：[4,9] 也是可通过的
 *
 * @author hanjuntao
 * @date 2025/6/6 0006
 */
public class L_349_intersection_of_two_arrays {
    public static void main(String[] args) {
        int[] nums1 = {1, 2, 2, 1};
        int[] nums2 = {2, 2};
        // System.out.println(Arrays.toString(intersection(nums1, nums2)));

        int[] nums3 = {4, 9, 5};
        int[] nums4 = {9, 4, 9, 8, 4};
        // System.out.println(Arrays.toString(intersection(nums3, nums4)));

        int[] nums5 = {2, 1};
        int[] nums6 = {1, 1};
        System.out.println(Arrays.toString(intersection(nums5, nums6)));
    }

    /**
     * 根据题意，就是找到两个数组都出现过的数，且返回的结果没有重复的
     *
     * @param nums1
     * @param nums2
     * @return
     */
    public static int[] intersection(int[] nums1, int[] nums2) {
        if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
            return new int[0];
        }

        int len1 = nums1.length;
        int len2 = nums2.length;

        int[] longArr;
        int[] shortArr;
        if (len1 > len2) {
            longArr = nums1;
            shortArr = nums2;
        } else {
            longArr = nums2;
            shortArr = nums1;
        }

        Set<Integer> set = new HashSet<>();

        for (int i = 0; i < longArr.length; i++) {
            for (int j = 0; j < shortArr.length; j++) {
                if (longArr[i] == shortArr[j]) {
                    set.add(longArr[i]);
                }
            }
        }

        int[] result = new int[set.size()];
        int i = 0;
        for (Integer integer : set) {
            result[i] = integer;
            i++;
        }

        return result;
    }

}
